Ext.define('aps.administrarProyectoPanel', {
    extend: 'Ext.form.Panel',
    alias : 'aps.administrarProyectoPanel',

    title :   'Administrar Proyecto',
    id:       'panel_administrar_proyecto',
    name:     'panel_administrar_proyecto',
    layout:   'fit',
    frame:    true,
    closable: true,
    border:   false,
  
    initComponent: function() {
        var grid_proyectos = Ext.create('aps.proyectoGrid');
        this.items = [{
            xtype:      'form',
            title:      'Administrar Proyecto',
            autoScroll: true,
            fieldDefaults: {
                blankText:     'Este campo no puede ser nulo',
                msgTarget:     'side',
                autoFitErrors: false
            },
            items: [{
                xtype:       'combo',
                margin:      '50 20 20 20',
                fieldLabel:  '<b>Buscar por</b>', 
                hiddenName:  'campo',  
                name:        'campo',
                editable:     false,
                mode:        'local',
                width:        480,
                labelWidth:   150,
                allowBlank:   false,
                displayField: 'opcion',
                valueField:   'campo',
                emptyText :   'Seleccione un campo', 
                store: new Ext.data.SimpleStore({  
                    id      : 0 ,  
                    fields  : ['id', 'opcion', 'campo'],  
                    data    : [
                        [1, 'Nombre del Proyecto', 'nombre'],
                        [2, 'Descripcion', 'descripcion'],  
                        [3, 'Fecha de Inicio', 'fechainicio'],
                        [4, 'Fecha de Fin', 'fechafin'],
                        [5, 'Estado del Proyecto', 'estado']
                    ]
                }),   
            }, {
                xtype:      'textfield',
                margin:     '5 20 20 20',
                name :      'igual',
                labelWidth:  150,
                width: 480,                
                fieldLabel: '<b>Igual a</b>',
                allowBlank: false
            },{
                xtype: 'button',
                text: 'Buscar',    
                x: 520,
                y: -42,
                iconCls: 'search-icon',
                handler:  this.form_buscar_handler            
            },
            grid_proyectos
            ]
        }];
        this.buttons =[{
            text:    'Finalizar Proyecto',
            id:      'terminar_proyecto_btn',
            iconCls: 'end-icon',
            hidden:  true,
            grid:    grid_proyectos,
            handler: this.form_terminar_handler
        },{    
            text:    'Iniciar Proyecto',
            id:      'iniciar_proyecto_btn',
            iconCls: 'ok-icon',
            hidden:  true,
            grid:    grid_proyectos,
            handler: this.form_iniciar_handler
        },{ 
            text:    'Asignar usuarios',
            id:      'asignar_usuario_btn',
            iconCls: 'asignar-icon',
            hidden:  true,
            grid:    grid_proyectos,
            handler: this.form_asignar_usuario_handler
        },{ 
            text:    'Asignar Comite',
            id:      'asignar_usuario_comite_btn',
            iconCls: 'asignar-icon',
            hidden:  true,
            grid:    grid_proyectos,
            handler: this.form_asignar_usuario_comite_handler
        }, {
            text:    'Modificar',
            id:      'modificar_proyecto_btn',
            iconCls: 'update-icon',
            hidden:  true,
            grid:    grid_proyectos,
            handler: this.form_update_handler
        }, {
            text:    'Eliminar',
            id:      'eliminar_proyecto_btn',
            iconCls: 'delete-icon',
            hidden:  true,
            grid:    grid_proyectos,
            handler: this.form_delete_handler
        }, {
            text:    'Nuevo',
            id:      'nuevo_proyecto_btn',
            iconCls: 'new-icon',
            hidden:  true,
            handler: this.form_new_handler
        }, {
            text:    'Cancelar',
            id:      'cancelar_proyecto_btn',
            iconCls: 'cancel-icon',            
            handler: this.form_cancel_handler
        }, {
            text:    'Limpiar',
            id:      'limpiar_proyecto_btn',
            iconCls: 'clear-icon',
            handler: this.form_reset_handler
        }, {
            text:    'Inf Solicitud',
            id:      'inf_solicitud_btn',
            iconCls: 'verrelaciones-icon',  
            hidden:  true,          
            grid:    grid_proyectos,
            handler: this.form_inf_solicitud_handler
        }, {
            text:    'Inf Items',
            id:      'inf_items_btn',
            iconCls: 'verrelaciones-icon', 
            hidden:  true,           
            grid:    grid_proyectos,
            handler: this.form_inf_items_handler
        }];
        
        this.listeners = {
            close : function() {
                // cerramos los paneles hijos abiertos (si hubiere)
                Ext.getCmp('area-central').cerrar_pestanhas([
                    'panel_modificar_proyecto',
                    'panel_crear_proyecto',
                    'panel_asignar_usuario'
                ]);
            },
            render : function(){
                // mostramos los botones segun los permisos
                var fun = Ext.getCmp('funcionalidades');
                if(fun.existe_permiso('co:ps')){
                    grid_proyectos.store.load();
                }
                if(fun.existe_permiso('co:pa')){
                    grid_proyectos.store.load({
                        params: {
                            id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
                        }
                    });
                }
                if(fun.existe_permiso('te:pr')){
                    Ext.getCmp('terminar_proyecto_btn').setVisible(true);
                }
                if(fun.existe_permiso('in:pr')){
                    Ext.getCmp('iniciar_proyecto_btn').setVisible(true);
                }
                if(fun.existe_permiso('cr:pr')){
                    Ext.getCmp('nuevo_proyecto_btn').setVisible(true);
                }
                if(fun.existe_permiso('mo:pr')){
                    Ext.getCmp('modificar_proyecto_btn').setVisible(true);
                }
                if(fun.existe_permiso('el:pr')){
                    Ext.getCmp('eliminar_proyecto_btn').setVisible(true);
                }
                if(fun.existe_permiso('as:us-pr')){
                    Ext.getCmp('asignar_usuario_btn').setVisible(true);               
                }
                if(fun.existe_permiso('as:us-cm')){
                    Ext.getCmp('asignar_usuario_comite_btn').setVisible(true);
                }
                if(fun.existe_permiso('if:cm')){
                    Ext.getCmp('inf_solicitud_btn').setVisible(true);               
                }
                if(fun.existe_permiso('if:it-fa')){
                    Ext.getCmp('inf_items_btn').setVisible(true);
                }
            }
        };
        
        this.callParent(arguments);
    },
    
    form_asignar_usuario_handler : function(){
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un proyecto para asignar / desasignar usuarios');
        }
        else if(records[0].data.estado == 'ANULADO' || records[0].data.estado == 'FINALIZADO'){
               Ext.Msg.alert('ERROR','No se puede asignar un usuario a este proyecto');
        }
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_asignar_usuario','aps.asignarUsuarioPanel');
            var panel  = Ext.getCmp('panel_asignar_usuario');
            panel.setVisible(false);
            var id_proyecto = records[0].data.id;
            // el campo 0 es nuestro campo oculto
            panel.items.getAt(0).setValue(id_proyecto)
            panel.llenar_grids();
            panel.setVisible(true);
        }
    },
    form_asignar_usuario_comite_handler : function(){
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un proyecto para asignar / desasignar miembros del comite');
        }
        else if(records[0].data.estado == 'ANULADO' || records[0].data.estado == 'FINALIZADO'){
               Ext.Msg.alert('ERROR','No se puede asignar Comite a este proyecto');
        }
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_asignar_usuario_comite','aps.asignarUsuarioComitePanel');
            var panel  = Ext.getCmp('panel_asignar_usuario_comite');
            panel.setVisible(false);
            var id_proyecto = records[0].data.id;
            // el campo 0 es nuestro campo oculto
            panel.items.getAt(0).setValue(id_proyecto)
            panel.llenar_grids();
            panel.setVisible(true);
        }
    },
    
    form_update_handler : function() {
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un registro para modificar');
        }
        else if(records[0].data.estado != 'NO-INICIADO' && records[0].data.estado != 'INICIADO' ){
               Ext.Msg.alert('ERROR','No se puede modificar este Proyecto porque se encuentra en estado '+records[0].data.estado);
        }     
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_modificar_proyecto','aps.modificarProyectoPanel');
            var panel = Ext.getCmp('panel_modificar_proyecto').form;
            panel.loadRecord(records[0]);
            if (records[0].data.fechainicio == '0001-01-01' && records[0].data.fechafin == '0001-01-01'){
                panel._fields.items[3].setValue('');
                panel._fields.items[4].setValue('');
            }
        }
    },
    
    form_terminar_handler: function(){
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un proyecto para finalizar');
        }
        else if(records[0].data.estado == 'FINALIZADO'){
            Ext.Msg.alert('INFO','El proyecto ya ha sido finalizado');
        }
        else if(records[0].data.estado != 'INICIADO' && records[0].data.estado != 'PENDIENTE'){
               Ext.Msg.alert('ERROR','No se puede finalizar el proyecto por su estado');
        }
        else{
            var grid = this.grid;            
            Ext.Msg.show({
                title:'INFO',
                msg: 'Esta seguro que desea finalizar este proyecto?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn){
                    if(btn == 'yes'){
                        // FINALIZACION
                        Ext.Ajax.request({
                            url:    '/terminar_proyecto',
                            params: {id_proyecto : records[0].data.id},
                            success: function(response, opts) {
                                var obj = Ext.JSON.decode(response.responseText);
                                if(obj.success){
                                    Ext.Msg.alert('INFO','Proyecto Finalizado!');
                                    // Actualizamos el grid de proyectos
                                    var fun = Ext.getCmp('funcionalidades');
                                    if(fun.existe_permiso('co:pa')){
                                        grid.getStore().load({
                                            params: {
                                                id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto,
                                            }
                                        });
                                    }      
                                    if(fun.existe_permiso('co:ps')){
                                        grid.getStore().load();
                                    }
                                    // Actualizamos el estado del proyecto en el combo
                                    Ext.getCmp('combo-proyecto').valueModels[0].data.estado = 'TERMINADO';
                                }
                                else {
                                    Ext.Msg.alert('ERROR','No se han finalizado todas las fases del proyecto!');
                                }
                            },
                        });
                    }
                }
            });
        }
    },
    
    form_iniciar_handler: function(){
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un proyecto para iniciar');
        }
        else if(records[0].data.estado == 'INICIADO'){
            Ext.Msg.alert('INFO','El proyecto ya ha sido iniciado');
        }
        else if(records[0].data.estado != 'NO-INICIADO' && records[0].data.estado != 'PENDIENTE'){
               Ext.Msg.alert('ERROR','No se puede iniciar el proyecto por su estado');
        }
        else{
            var grid = this.grid;            
            Ext.Msg.show({
                title:'INFO',
                msg: 'Esta seguro que desea iniciar este proyecto?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn){
                    if(btn == 'yes'){
                        // INICIALIZACION
                        Ext.Ajax.request({
                            url:    '/iniciar_proyecto',
                            params: {id_proyecto : records[0].data.id},
                            success: function(response, opts) {
                                var obj = Ext.JSON.decode(response.responseText);
                                if(obj.success){
                                    // Actualizamos el grid de proyectos
                                    Ext.Msg.alert('INFO','Proyecto Iniciado!');
                                    var fun = Ext.getCmp('funcionalidades');
                                    if(fun.existe_permiso('co:pa')){
                                        grid.getStore().load({
                                            params: {
                                                id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto,
                                            }
                                        });
                                    }      
                                    if(fun.existe_permiso('co:ps')){
                                        grid.getStore().load();
                                    }
                                    // Actualizamos el estado del proyecto en el combo
                                    Ext.getCmp('combo-proyecto').valueModels[0].data.estado = "INICIADO";
                                } 
                                else {
                                   Ext.Msg.alert('ERROR','El proyecto no tiene ninguna fase!');
                                }
                            },
                        });
                    }
                }
            });
        }
    },
    
    
    form_delete_handler : function() {
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un registro para eliminar');
        }
        else if(records[0].data.estado != 'ANULADO' && records[0].data.estado != 'FINALIZADO' && records[0].data.estado != 'NO-INICIADO'){
               Ext.Msg.alert('ERROR','No se puede eliminar este Proyecto porque se encuentra en estado '+records[0].data.estado);
        }     
        else{
            var grid = this.grid;
            Ext.Msg.show({
                title:'INFO',
                msg: 'Esta seguro que desea eliminar este registro?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn){
                    if(btn == 'yes'){
                        // ELIMINACION
                        Ext.Ajax.request({
                            url:    '/eliminar_proyecto',
                            params: {id : records[0].data.id},
                            success: function(response, opts) {
                                // Actualizamos le grid de proyectos
                                Ext.Msg.alert('INFO','Registro eliminado con exito');
                                var fun = Ext.getCmp('funcionalidades');
                                if(fun.existe_permiso('co:pa')){
                                    grid.getStore().load({
                                        params: {
                                            id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
                                        }
                                    });
                                }
                                if(fun.existe_permiso('co:ps')){
                                    grid.getStore().load();
                                }
                                // Actualizamos el estado del proyecto en el combo
                                Ext.getCmp('combo-proyecto').valueModels[0].data.estado = 'ELIMINADO';
                            },
                            failure: function(response, opts) {
                                Ext.Msg.alert('ERROR','Ocurrio un problema al eliminar el registro!');
                            }
                        });
                    }
                }
            });
        }
    },
    
    form_buscar_handler: function(){
        var form = this.up('form').getForm();
        var campo = form.findField('campo').getValue();
        var valor = form.findField('igual').getValue();
        var fun = Ext.getCmp('funcionalidades');
        if(valor == '' || campo == null){
            Ext.Msg.alert('ERROR','Los parametros de busqueda son ivalidos o estan incompletos');
        }
        else{
            if(fun.existe_permiso('co:pa')){
                Ext.StoreMgr.lookup('proyectoStore').load({
                    params: {
                    id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto,
                    filtro : campo,
                    valor:   valor
                }
            });
            }
            if(fun.existe_permiso('co:ps')){
                Ext.StoreMgr.lookup('proyectoStore').load({
                    params: {
                        filtro : campo,
                        valor:   valor
                    }
                });
            }
        }
    },
    
    form_new_handler: function() {
        Ext.getCmp('area-central').agregar_pestanha('panel_crear_proyecto','aps.crearProyectoPanel');
    },
    
    form_reset_handler: function() {
        // limpiamos el formulario y hacemos foco en el primer campo
        var form = this.up('form').getForm();
        var fun = Ext.getCmp('funcionalidades');
        form.reset();
        form.findField('campo').focus(true,100);
        // recargamos el store
        if(fun.existe_permiso('co:pa')){
            Ext.data.StoreManager.lookup('proyectoStore').load({
                params: {
                    id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
                }
           });
        }
        if(fun.existe_permiso('co:ps')){
            Ext.data.StoreManager.lookup('proyectoStore').load();
        }
    },
    
    form_cancel_handler: function() {
        this.up('panel').close();
    },
    form_inf_solicitud_handler : function(){
    	var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un registro');
        }
        else{ 
        	Ext.Ajax.request({
                url:    '/crear_informe_solicitud',
                params: {
                	idproyecto : records[0].data.id
                },
                success: function(response, opts) {
                	Ext.Msg.info('ERROR','Informe generado con exito!');
                },
                failure: function(response, opts) {
                    Ext.Msg.alert('ERROR','Ocurrio un problema al generar el informe!');
                }
            });  
        }
    },
    form_inf_items_handler : function(){
    	var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un registro');
        }
        else{ 
        	Ext.Ajax.request({
                url:    '/crear_informe',
                params: {
                	idproyecto : records[0].data.id
                },
                success: function(response, opts) {
                	Ext.Msg.info('ERROR','Informe generado con exito!');
                },
                failure: function(response, opts) {
                    Ext.Msg.alert('ERROR','Ocurrio un problema al generar el informe!');
                }
            });  
        }
    }
    
});
